#ifndef _MYI2C_H
#define _MYI2C_H

#include "gd32e230.h"                   // Device header
#include "systick.h"

//*********************************************************************************//
// 					I2C0 定义区

#define MyI2C_0_RCU_GPIOX   RCU_GPIOB  //I2C0所用GPIO时钟
#define MyI2C_0_GPIOX   		GPIOB 		 //I2C0所用GPIO组
#define MyI2C_0_SDA         GPIO_PIN_8 //I2C0 SDA引脚
#define MyI2C_0_SCL					GPIO_PIN_9 //I2C0 SCL引脚
//I2C0 SDA引脚控制
#define MyI2C_0_SDA_Ctrl(x)	do{gpio_bit_write(MyI2C_0_GPIOX,MyI2C_0_SDA,x);}while(0)
//I2C0 SCL引脚控制
#define MyI2C_0_SCL_Ctrl(x)	do{gpio_bit_write(MyI2C_0_GPIOX,MyI2C_0_SCL,x);}while(0)
//I2C0 SDA引脚状态读取
#define MyI2C_0_SDA_Read()  (gpio_input_bit_get(MyI2C_0_GPIOX,MyI2C_0_SDA)) 

//I2C间隔延迟
#define MyI2C_delay()				delay_1ms(1)
//*********************************************************************************//



//I2C0初始化
//无参
//无返回值
void MyI2C_0_init(void);

//I2C协议起始信号
//在SCL高电平时，将SDA拉低
//无参
//无返回值
void MyI2C_Start(void);

//I2C协议停止信号
//在SCL高电平时，将SDA拉高
//无参
//无返回值
void MyI2C_Stop(void);

//I2C协议，发送单个数据
//参数：data : 需要发送的数据
//无返回值
void MyI2C_SendOneData(unsigned char data);

//I2C协议，接收一个字节数据
//无参
//返回值 接收到的一个字节数据
unsigned char MyI2C_ReceiveOneData(void);

//I2C协议 应答
//参数: ACK:   0:应答 1:不应答
void MyI2C_SendACK(unsigned char ACK);

//I2C协议 接收应答
//无参
//返回值： 应答值 0：从机应答 1：从机不应答
unsigned char MyI2C_ReceiveACK(void);

#endif
